package com.gg.hml.mapper;

import com.gg.common.pojo.DFile;
import com.gg.common.pojo.DModuleDetails;
import com.gg.common.pojo.DesignModule;
import com.gg.hml.search.ProductFileSearch;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ProductMapper {



    /**
     * 判断产品名称是否存在
     * @param productName
     * @return
     */
    DFile judgmentProductName(String productName);

    /**
     * 查询所有未复审的产品档案
     * @return
     */
    List<DFile> queryReviewInformation(ProductFileSearch<DFile> productFileSearch);

    /**
     * 根据一级分类名称查询一级分类编号
     * @param firstKindName
     * @return
     */
    String queryFirstKindId(String firstKindName);

    /**
     * 根据二级分类名称查询二级分类编号
     * @param secondKindName
     * @return
     */
    String querySecondKindName(String secondKindName);

    /**
     * 根据三级分类名称查询三级分类编号
     * @param thirdKindName
     * @return
     */
    String queryThirdKindName(String thirdKindName);

    /**
     * 添加商品
     * @param dfile
     */
    void addProduct(DFile dfile);

    /**
     * 修改审核通过的产品
     * @param dfile
     */
    void updateProduct(DFile dfile);

    /**
     * 查询所有已通过审核的产品信息
     * @param productFileSearch
     * @return
     */
    List<DFile> queryProfileEnquiries(ProductFileSearch<DFile> productFileSearch);

    /**
     * 修改产品信息的删除标志为已删除(逻辑删除)
     * @param dFile
     */
    void DeleteProduct(DFile dFile);

    /**
     * 查询已删除的产品信息
     * @param productFileSearch
     * @return
     */
    List<DFile> QueryDeletedProduct(ProductFileSearch<DFile> productFileSearch);

    /**
     * 根据id永久删除产品
     * @param id
     */
    void PermanentlyDeletedProduct(int id);


    /**
     * 查询到所有需定义物料组成的产品档案列表(用途类型为商品(Y001-1),审核标志为已通过(S001-1))
     * @return List<DFile>
     */
    List<DFile> QueryMaterialsToBeDevelopedProduct(ProductFileSearch<DFile> productFileSearch);

    /**
     * 制定产品物料组成
     * @param designModule
     */
    void saveDesignModule(DesignModule designModule);

    /**
     * 制定产品物料组成明细
     * @param dModuleDetails
     */
    void saveDesignModuleDetails(List<DModuleDetails> dModuleDetails);

    /**
     * 根据产品编号修改产品物料表的物料组成标志
     * @param productId
     */
    void updateDsignModuleTag(String productId);

    /**
     * 根据产品编号查询产品物料组成表的id
     * @param productId
     * @return
     */
    int queryPrimaryKeyByDesignModule(String productId);

    /**
     * 查询产品物料组成表的未审核产品信息
     * @param designModuleProductFileSearch
     * @return
     */
    List<DesignModule> QueryNotApprovedProducts(ProductFileSearch<DesignModule> designModuleProductFileSearch);

    /**
     * 根据parent_id查询物料组成明细
     * @param parent_id
     * @return
     */
    List<DModuleDetails> QueryDModuleDetails(String parent_id);

    /**
     * 根据id驳回产品物料组成表
     * @param designModule
     */
    void PassDesignModuleById(DesignModule designModule);


    /**
     * 查询审核通过的产品物料组成
     * @return
     */
    int QueryPassModuleCount();

    /**
     * 查询待审核的产品物料组成
     * @return
     */
    int QueryWaitPassModuleCount();

    /**
     * 查询审核不通过的产品物料组成
     * @return
     */
    int QueryNoPassModuleCount();

    /**
     *
     * @param parentId
     * @param detailsNumber
     */
    void deleteModuleByDetailsNumber(@Param("parentId") int parentId,@Param("detailsNumber") int detailsNumber);

    /**
     * 批量添加产品物料明细
     * @param dModuleDetails
     */
    void BatchInsertDMouleDetails(DModuleDetails dModuleDetails);

    /**
     * 根据parent_id和物料序号批量修改产品物料明细
     * @param dModuleDetails
     */
    void BatchUpdateDMouleDetails(DModuleDetails dModuleDetails);

    /**
     * 变更完产品物料组成明细后根据id修改产品物料组成表的审核状态和变更状态
     * @param designModule
     */
    void BatchUpdateDModuleStatus(DesignModule designModule);
}
